<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Promise</title>
</head>
<body>

<script>
    function queryData(url){
        return new Promise(function(resolve,reject){
            let xml = new XMLHttpRequest();
            xml.open("get",url);
            xml.send(null);
            xml.onreadystatechange = function(){ //改变状态值时触发
                if(xml.readyState != 4){   //如果不到状态4，说明不成功，直接return出去
                    return false;
                }
                if(xml.readyState == 4 && xml.status >=200 && xml.status <300){
                    resolve(xml.responseText);
                }else{
                    reject("服务器错误！")
                }
            }
        });

    }

/*
    常用的api(原型)
    * p.then() 得到异步任务正确的值
    * p.catch()  获取异常信息
    * p.finally() 成功与否否会执行
 */
    queryData("../AData/data.json")
    .then(function(res){
        console.log("1:"+res);
    }).catch(function(e){
        console.log("2:"+e);
    }).finally(function(){
        console.log("3");
    });

    //等于

    queryData("../AData/data.json")
    .then(function(res){
        console.log("1:"+res);
    },function(rej){
        console.log("1:"+rej);
    }).finally(function(){
        console.log("3");
    })


    /*
    常用的api （对象方法）
    Promise.all() 并发处理多个异步任务，所有任务多执行完成才能得到结果
    promise.race()  并发处理多个异步任务，只要有一个任务完成就能得到结果
    * */
</script>
</body>
</html>
